//package com.charley.icloud.admin.config;
//
////import com.charley.icloud.admin.security.JwtAuthenticationFilter;
////import com.charley.icloud.admin.security.JwtAuthenticationProvider;
////import com.charley.icloud.admin.security.JwtLoginFilter;
//import org.springframework.context.annotation.Bean;
//import org.springframework.context.annotation.Configuration;
//import org.springframework.http.HttpMethod;
//import org.springframework.security.authentication.AuthenticationManager;
//import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
//import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
//import org.springframework.security.config.annotation.web.builders.HttpSecurity;
//import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
//import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
//import org.springframework.security.core.userdetails.UserDetailsService;
//import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
//import org.springframework.security.web.authentication.logout.HttpStatusReturningLogoutSuccessHandler;
//
//import javax.annotation.Resource;
//
///**
// * Spring Security配置
// *   主要是进行一些安全相关的配置，比如权限URL匹配策略、认证过滤器配置、定制身份验证组件、开启权限认证注解等
// *   1. 访问路径URL的授权策略，如登录、Swagger访问免登录认证等
// *   2. 指定了登录认证流程过滤器 JwtLoginFilter，由它来触发登录认证
// *   3. 指定了自定义身份认证组件 JwtAuthenticationProvider，并注入 UserDetailsService
// *   4. 指定了访问控制过滤器 JwtAuthenticationFilter，在授权时解析令牌和设置登录状态
// *   5. 指定了退出登录处理器，因为是前后端分离，防止内置的登录处理器在后台进行跳转
// * @author charley
// * @date 2024-04-25 13:09
// */
//@Configuration
//@EnableWebSecurity    // 开启Spring Security
////@EnableGlobalMethodSecurity(prePostEnabled = true)	// 开启权限注解，如：@PreAuthorize注解
//public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
//
//    @Resource
//    private UserDetailsService userDetailsService;
//
//    @Override
//    public void configure(AuthenticationManagerBuilder auth) {
//        // 使用自定义身份验证组件
//        //auth.authenticationProvider(new JwtAuthenticationProvider(userDetailsService));
//    }
//
//    @Override
//    protected void configure(HttpSecurity http) throws Exception {
//        // 禁用 csrf, 由于使用的是JWT，这里不需要csrf
//        http.cors().and().csrf().disable()
//    		.authorizeRequests()
//    		// 跨域预检请求
//            .antMatchers(HttpMethod.OPTIONS, "/**").permitAll()
//            // web jars
//            .antMatchers("/webjars/**").permitAll()
//            // 查看SQL监控（druid）
//            .antMatchers("/druid/**").permitAll()
//            // 首页和登录相关接口
//            .antMatchers("/").permitAll()
//            .antMatchers("/auth/**").permitAll()
//            .antMatchers("/user/**").permitAll()  // 放开/user
//            // swagger
//            .antMatchers("/doc.html").permitAll()
//            .antMatchers("/swagger-resources/**").permitAll()
//            .antMatchers("/v3/api-docs/**").permitAll()
//            .antMatchers("/webjars/springfox-swagger-ui/**").permitAll()
//            .antMatchers("/favicon.ico").permitAll()
//            // 验证码
//            .antMatchers("/auth/captcha.jpg").permitAll()
//            // 服务监控
//            .antMatchers("/actuator/**").permitAll();
//            // 其他所有请求需要身份认证
//            //.anyRequest().authenticated();
//            // 配置登录认证
//            //.and().formLogin().loginProcessingUrl("/login");
//        // 退出登录处理器: 因为是前后端分离，防止内置的登录处理器在后台进行跳转
////        http.logout().logoutSuccessHandler(new HttpStatusReturningLogoutSuccessHandler());
//        // 开启登录认证流程过滤器
//        //http.addFilterBefore(new JwtLoginFilter(authenticationManager()), UsernamePasswordAuthenticationFilter.class);
//        // 访问控制时登录状态【token】验证过滤器
//        //http.addFilterBefore(new JwtAuthenticationFilter(authenticationManager()), UsernamePasswordAuthenticationFilter.class);
//    }
//
//    @Bean
//    @Override
//    public AuthenticationManager authenticationManager() throws Exception {
//    	return super.authenticationManager();
//    }
//
//}
